package fornecedor

import ws.Fornecedor;
import ws.FornecedorVetor;
import ws.BuscaChaveEstrangeira;
import ws.BuscaChaveEstrangeiraVetor;
import util.GerenciadorTabelas;
import java.util.ArrayList;
import java.util.HashMap;
import groovyx.net.ws.WSClient;
import wsgroovy.ManagerWebService;

class FornecedorDominioController {

    def index = {
        redirect action:"list", params:params 
    }

    // the delete, save and update actions only accept POST requests
    static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def list = {
        GerenciadorTabelas.getInstance().getParams().clear();

        def proxy = ManagerWebService.getInstance().getProxy()
        ArrayList<FornecedorDominio> lista = new ArrayList<FornecedorDominio>();

        //gambiarra para ver se ja foi atribuido 'def fornecedor' com o tipo de classe lá do BPEL
        if( (params.buscaNome == null) && (ManagerWebService.getInstance().getFornecedor().getClass() == String.class) ){
            def forn = proxy.readFornecedorPorId(-1)
            ManagerWebService.getInstance().setFornecedor(forn);
        }

        if(params.buscaNome != null){
            
            def fornVetor = proxy.readFornecedor(params.buscaNome)
            ManagerWebService.getInstance().setFornecedor(fornVetor.getLista().get(0));
            lista = fornVetor.getLista();

            if(lista.get(0).getTcodFornecedorPk() == -1){  //"desfaz a gambiarra com outra gambiarra hehehe"
                lista.clear();
            }
        }

        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        [fornecedorDominioInstanceList: lista]
    }

    def show = {
        //def fornecedorDominioInstance = FornecedorDominio.get( params.tcod_fornecedor_pk )
        def fornecedorDominioInstance = ManagerWebService.getInstance().getProxy().readFornecedorPorId(params.id)

        if(!fornecedorDominioInstance) {
            flash.message = "FornecedorDominio not found with CNPJ ${params.tnum_cpf_cnpj}"
            redirect(action:list)
        }
        else {
            [ fornecedorDominioInstance : fornecedorDominioInstance ]
        }
    }

    def delete = {
        //def fornecedorDominioInstance = FornecedorDominio.get( params.id )
        def proxy = ManagerWebService.getInstance().getProxy();
        boolean resp = proxy.deleteFornecedor(params.id);

        println "DELETE params: " + params
        if(resp){
            flash.message = "Fornecedor ${params.id} deletado"
        }
        else {
            flash.message = "Fornecedor não deletado ou não encontrado com id ${params.id}"
        }
        redirect(action:"list")
    }

    def edit = {
        //def fornecedorDominioInstance = FornecedorDominio.get( params.id )
        def fornecedorDominioInstance = ManagerWebService.getInstance().getProxy().readFornecedorPorId(params.id)

        if(!fornecedorDominioInstance) {
            flash.message = "FornecedorDominio not found with CNPJ ${params.tnum_cpf_cnpj}"
            redirect action:'list'
        }
        else {
            return [ fornecedorDominioInstance : fornecedorDominioInstance ]
        }
    }

    def update = {
        //println "No UPDATE: " + GerenciadorTabelas.getInstance().getParams()
        println "UPDATE do cao: " + params
        int id;
        if(GerenciadorTabelas.getInstance().getParams().isEmpty()){
            id = new Integer(params.id)
        }
        else{
            id = new Integer(GerenciadorTabelas.getInstance().getParams().get("id"))
        }
        //def fornecedorDominioInstance = FornecedorDominio.get( params.id )
        def fornecedorDominioInstance = ManagerWebService.getInstance().getProxy().readFornecedorPorId(id)

        if(fornecedorDominioInstance) {
            if(params.version) {
                def version = params.version.toLong()
                if(fornecedorDominioInstance.version > version) {
                    
                    fornecedorDominioInstance.errors.rejectValue("version", "fornecedorDominio.optimistic.locking.failure", "Another user has updated this FornecedorDominio while you were editing.")

                    render view:'edit', model:[fornecedorDominioInstance:fornecedorDominioInstance]
                    return
                }
            }
            //fornecedorDominioInstance.properties = params
            fornecedorDominioInstance = new FornecedorDominio(params)

            fornecedorDominioInstance.tcod_fornecedor_pk = 1;
            if(fornecedorDominioInstance.validate()) {
                flash.message = "FornecedorDominio ${params.id} updated"

                def f = ManagerWebService.getInstance().getFornecedor()
                //Fornecedor f = new Fornecedor();
                f.setTcodFornecedorPk(-1);
                f.setTcidadeFk(fornecedorDominioInstance.tcidade_fk);
                f.setTclassificacaoFiscalFk(fornecedorDominioInstance.tclassificacao_fiscal_fk);
                f.setTendereco(fornecedorDominioInstance.tendereco);
                f.setTfax(fornecedorDominioInstance.tfax);
                f.setTinscricaoEstadual(fornecedorDominioInstance.tinscricao_estadual);
                f.setTnomeFantasia(fornecedorDominioInstance.tnome_fantasia);
                f.setTnumCpfCnpj(fornecedorDominioInstance.tnum_cpf_cnpj);
                f.setTpessoaResponsavel(fornecedorDominioInstance.tpessoa_responsavel);
                f.setTramoAtividade(fornecedorDominioInstance.tramo_atividade);
                f.setTrazaoSocial(fornecedorDominioInstance.trazao_social);
                f.setTtelefone(fornecedorDominioInstance.ttelefone);
                f.setTcodFornecedorPk(id);

                def proxy = ManagerWebService.getInstance().getProxy()
                if(proxy.updateFornecedor(f) == true){
                    flash.message = "FornecedorDominio ${fornecedorDominioInstance.tcidade_fk} atualizado"
                    GerenciadorTabelas.getInstance().getParams().clear();
                }
                else{
                    flash.message = "FornecedorDominio não criado"
                }

                redirect(action:"show",id:id)
            }
            else {
                render view:'edit', model:[fornecedorDominioInstance:fornecedorDominioInstance]
            }
        }
        else {
            flash.message = "FornecedorDominio not found with id ${params.id}"
            redirect action:'list'
        }
    }

    def create = {
            
        def fornecedorDominioInstance = new FornecedorDominio()
        if(GerenciadorTabelas.getInstance().getParams().isEmpty()){
            fornecedorDominioInstance.properties = params
        }
        else{
            fornecedorDominioInstance.properties = GerenciadorTabelas.getInstance().getParams()
            GerenciadorTabelas.getInstance().resetMap();
            println "No else do create: " + GerenciadorTabelas.getInstance().getParams()
        }

        return ['fornecedorDominioInstance':fornecedorDominioInstance]
    }

    def save = {

        println "Metodo save PARAMS: " + params
        println "Metodo save GETPARAMS: " + GerenciadorTabelas.getInstance().getParams()
        
        def fornecedorDominioInstance = new FornecedorDominio()
        fornecedorDominioInstance.properties = GerenciadorTabelas.getInstance().getParams()
        fornecedorDominioInstance.properties = params
        
        fornecedorDominioInstance.tcod_fornecedor_pk = 1;
        fornecedorDominioInstance.tclassificacao_fiscal_fk = "NO";
        fornecedorDominioInstance.tcidade_fk = "44100000";
        if(fornecedorDominioInstance.validate()){
                
            def f = ManagerWebService.getInstance().getFornecedor()
            //Fornecedor f = new Fornecedor();
            f.setTcodFornecedorPk(-1);
            f.setTcidadeFk(fornecedorDominioInstance.tcidade_fk);
            f.setTclassificacaoFiscalFk(fornecedorDominioInstance.tclassificacao_fiscal_fk);
            f.setTendereco(fornecedorDominioInstance.tendereco);
            f.setTfax(fornecedorDominioInstance.tfax);
            f.setTinscricaoEstadual(fornecedorDominioInstance.tinscricao_estadual);
            f.setTnomeFantasia(fornecedorDominioInstance.tnome_fantasia);
            f.setTnumCpfCnpj(fornecedorDominioInstance.tnum_cpf_cnpj);
            f.setTpessoaResponsavel(fornecedorDominioInstance.tpessoa_responsavel);
            f.setTramoAtividade(fornecedorDominioInstance.tramo_atividade);
            f.setTrazaoSocial(fornecedorDominioInstance.trazao_social);
            f.setTtelefone(fornecedorDominioInstance.ttelefone);
    
            def proxy = ManagerWebService.getInstance().getProxy()
            if(proxy.createFornecedor(f) == true){
                flash.message = "FornecedorDominio ${fornecedorDominioInstance.tcidade_fk} created"
                GerenciadorTabelas.getInstance().getParams().clear();
            }
            else{
                flash.message = "FornecedorDominio não criado"
            }
            redirect action:"list"
        }
        else {
            render view:'create', model:[fornecedorDominioInstance:fornecedorDominioInstance]
        }
    }
    
    def searchClassificacao = {
        //redirect action:"list", params:params
        println "Search classificacao: " + params
        render view:'searchClassificacaoFiscal', params:params
        GerenciadorTabelas.getInstance().setParams(new HashMap(params));
    }

    def selecionarClassificacao = {
        GerenciadorTabelas.getInstance().getParams().put("tclassificacao_fiscal_fk", params.id)
        //render view:'create', model:[fornecedorDominioInstance:fornecedorDominioInstance]
        println "Selecionar classificacao: " + params

        if(GerenciadorTabelas.getInstance().getParams().containsKey("id")){
            def fornecedorDominioInstance = new FornecedorDominio()
            fornecedorDominioInstance.properties = GerenciadorTabelas.getInstance().getParams()
            println "Se contains ID: " + GerenciadorTabelas.getInstance().getParams()
            render view:'edit', model:[fornecedorDominioInstance:fornecedorDominioInstance]
        }
        else{
            redirect action:'create'
        }
    }

    def buscarClassificacaoPorSigla = {
        
        def proxy = ManagerWebService.getInstance().getProxy()
        def classFiscal = proxy.searchClassificacaoPorId(params.siglaClassificacao);

        ArrayList<BuscaChaveEstrangeira> lista = new ArrayList<BuscaChaveEstrangeira>();

        if(classFiscal != null){
            lista = classFiscal.getLista();
        }
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        //render view:'create', model:[classificacaoFiscalList: lista, 'fornecedorDominioInstance':fornecedorDominioInstance]
        render view:'searchClassificacaoFiscal', model:[classificacaoFiscalList: lista]
    }

    def buscarClassificacaoPorDescricao = {
        def proxy = ManagerWebService.getInstance().getProxy()
        def classFiscal = proxy.searchClassificacaoPorNome(params.descricaoClassificacao);

        ArrayList<BuscaChaveEstrangeira> lista = new ArrayList<BuscaChaveEstrangeira>();

        if(classFiscal != null){
            lista = classFiscal.getLista();
        }
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        //render view:'create', model:[classificacaoFiscalList: lista]
        render view:'searchClassificacaoFiscal', model:[classificacaoFiscalList: lista]
    }

    def searchCidade = {
        //redirect action:"list", params:params
        render view:'searchCidadeCEP', params:params
        GerenciadorTabelas.getInstance().setParams(new HashMap(params));
    }

    def selecionarCidade = {
        GerenciadorTabelas.getInstance().getParams().put("tcidade_fk", params.id)
        //render view:'create', model:[fornecedorDominioInstance:fornecedorDominioInstance]
        if(GerenciadorTabelas.getInstance().getParams().containsKey("id")){
            def fornecedorDominioInstance = new FornecedorDominio()
            fornecedorDominioInstance.properties = GerenciadorTabelas.getInstance().getParams()
            render view:'edit', model:[fornecedorDominioInstance:fornecedorDominioInstance]
        }
        else{
            redirect action:'create'
        }
    }

    def buscarCidadePorCEP = {
        def proxy = ManagerWebService.getInstance().getProxy()
        def cidadeCEP = proxy.searchCidadePorId(params.cepCidade);

        ArrayList<BuscaChaveEstrangeira> lista = new ArrayList<BuscaChaveEstrangeira>();

        if(cidadeCEP != null){
            lista = cidadeCEP.getLista();
        }
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        //[cidadeCEPList: lista, cidadeCEPListTotal: lista.size()]
        render view:'searchCidadeCEP', model:[cidadeCEPList: lista]
    }

    def buscarCidadePorNome = {
        def proxy = ManagerWebService.getInstance().getProxy()
        def cidadeCEP = proxy.searchCidadePorNome(params.nomeCidade);

        ArrayList<BuscaChaveEstrangeira> lista = new ArrayList<BuscaChaveEstrangeira>();

        if(cidadeCEP != null){
            lista = cidadeCEP.getLista();
        }
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        //[cidadeCEPList: lista, cidadeCEPListTotal: lista.size()]
        render view:'searchCidadeCEP', model:[cidadeCEPList: lista]
    }
}